﻿using System;
using System.Collections.Generic;
using System.Data.Linq;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
namespace Systemet
{
    /// <summary>
    /// Validera om kundnamnet redan finns i databasen och ifall användaren
    /// har valt att skapa en ny kund.
    /// </summary>
    /// <param name="kundObject">Ett objekt av typen Kund</param>
    /// <param name="isNew">Bool som indikerar på ny kunddata</param>
    /// <returns>returnerar true/false indikerar på lyckad/misslyckad kundgenerering i DB</returns>

    class Registreringar
    {
        private LinqToSQLDataContext database;
        private bool successfull = false;
        private string pass = "";

        public bool validateKund(Kund kundObject, bool isNew)
        {
            string line;
            StreamReader pss = new StreamReader(@"Kommentarer.txt");
            while ((line = pss.ReadLine()) != null)
            {
                pass = line;
            }

            database = new LinqToSQLDataContext(pass);
           
            var nykund = from Kund in database.Kundregisters
                         where Kund.kundNamn == kundObject.KundNamn
                         select Kund.kundNamn;

            if (!nykund.Contains(kundObject.KundNamn) && isNew == true)
            {
                successfull = Kundregistrering(kundObject);
            }
            else if (nykund.Contains(kundObject.KundNamn) && isNew == false)
            {
                successfull = UpdateKundregister(kundObject);
            }
            return successfull;
        }

        private bool Kundregistrering(Kund kundObject)
        {
            try
            {
                Kundregister nyKund = new Kundregister
                {
                    kundID = GenerateKundID(),
                    kundNamn = kundObject.KundNamn,
                    kundkategori = kundObject.Kundkategori,
                    email = kundObject.Email,
                    andratDatum = kundObject.Datum,
                    kontaktFnamn = kundObject.Fname,
                    kontaktEnamn = kundObject.Ename,
                    signatur = kundObject.Signerad,
                    telefonnummer = kundObject.Telefonnummer
                };

                database.Kundregisters.InsertOnSubmit(nyKund);
                database.SubmitChanges();
                return true;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                return false;
            }
        }

        private bool UpdateKundregister(Kund kundObject)
        {
            Kundregister uppdateraKund = database.Kundregisters.Single(k => k.kundID == kundObject.KundID);
            try
            {
                uppdateraKund.kundkategori = kundObject.Kundkategori;
                uppdateraKund.kundNamn = kundObject.KundNamn;
                uppdateraKund.kontaktFnamn = kundObject.Fname;
                uppdateraKund.kontaktEnamn = kundObject.Ename;
                uppdateraKund.email = kundObject.Email;
                uppdateraKund.telefonnummer = kundObject.Telefonnummer;
                uppdateraKund.signatur = kundObject.Signerad;
                uppdateraKund.andratDatum = kundObject.Datum;

                database.SubmitChanges();
                return true;
            }
            catch (Exception e)
            {
                MessageBox.Show(e.ToString());
                return false;
            }
        }

        private string GenerateKundID()
        {
            string newKundID;
            Random rnd = new Random();
            return newKundID = "A" + rnd.Next(1, 1000);
        }
    }
}